package dletc.demo;

import java.io.FileInputStream;
import java.io.FileNotFoundException;

/**
 * 处理异常的第一种方式：在方法声明的位置上使用throws关键字抛出，谁调用我这个方法，异常就抛出给谁处理。
 * 这种处理异常的待遇：上报 推卸责任。
 * 但：有时需要上抛异常，让调用者知晓，或者在方法调用多种异常方法时，上抛到调用方法，统一捕捉。
 * 处理异常的第二种方式：使用try..catch语句，捕捉了。
 */

public class demo04 {
	/**
	 * 一般不建议在main方法上使用throws，因为异常发生了，上抛给JVM，JVM只会终止程序
	 * 异常处理机制的作用就是增加健壮性，怎么能做到，异常发生了也不影响程序的运行。
	 * 一般main方法的异常建议捕捉，不建议上抛
	 */
	public static void main(String[] args){
		System.out.println("mainStart");
		try {
			m1();  //catch可以捕捉 2个异常，也可以多个catch。
		} catch (ClassCastException | FileNotFoundException e) {
			
			e.printStackTrace();
		}
		System.out.println("mainend");

	}
	
	/**
	 * 抛出别的异常不行，抛ClassCastException 不行，异常不匹配
	 * 但是可以抛出父类的异常 IoException 抛出老祖宗 Exception也行  结论 可以抛父类和包含该异常的类 因为多态机制。
	 * 可以抛出多个异常，用“，”隔开
	 */
	private static void m1() throws ClassCastException,FileNotFoundException {
		System.out.println("m1Start");
		m2();
		System.out.println("m1end");
	}

	private static void m2() throws FileNotFoundException {
		System.out.println("m2Start");
		m3();
		System.out.println("m2end");
	}

	private static void m3() throws FileNotFoundException {
		/**
		 * 创建一个输入对象，该流指向一个文件
		 * FileNotFoundException是编译时异常，需要进行编译时预处理。
		 * 采用上抛
		 */
		new FileInputStream("D:\\中软学习\\日语学习\\50清音.jpg");
	}

}
